"""
题目：斐波那契数列。

程序分析：斐波那契数列（Fibonacci sequence），又称黄金分割数列，指的是这样一个数列：0、1、1、2、3、5、8、13、21、34、……,0是第零项
"""


def fib(n):
    """
    实现方式一
    :param n: 第n项 从0开始
    :return: n项值
    """
    a, b = 0, 1
    for i in range(n):
        # print(f"i={i}")
        a, b = b, a + b

    return a


print(fib(10))


def fib2(n):
    """
    实现方式二：递归
    :param n: 第n项
    :return: 第n项值
    """
    if n == 0:
        return 0
    elif n <= 2:
        return 1
    else:
        return fib2(n - 1) + fib2(n - 2)


print(fib2(10))


def fib3(n: int) -> list:
    """
    计算斐波拉契数列前n项
    :param n: n项 0开始
    :return: 前n项值列表
    """
    if n == 0:
        return [0]
    elif n == 1:
        return [1]
    elif n == 2:
        return [1, 1]
    fibs = [0, 1, 1]
    for i in range(2, n):
        fibs.append(fibs[-1] + fibs[-2])  # [-1]取倒数第一个元素，[-2]取列表倒数第二个元素
    return fibs


print(f"斐波拉契数列前10项为:{fib3(10)}")
